import Settings from '../config/Settings.js';
import BackgroundElement from '../effects/BackgroundElement.js';

export default class BackgroundManager {
  constructor(game) {
    this.game = game;
    this.elements = [];
    this.timer = 0;
    this.currentTheme = null;
    this.themeElementsMap = {
      'forest': 'forest',
      '森林起始': 'forest',
      '丛林深处': 'jungle',
      '森林领主': 'bossForest',
      '雪山冰峰': 'snow',
      '冰雪女王': 'bossSnow'
    };
  }
  
  update() {
    // 更新现有元素
    for (let i = this.elements.length - 1; i >= 0; i--) {
      // update() 返回 true 表示元素应该被移除
      if (this.elements[i].update()) {
        this.elements.splice(i, 1);
      }
    }
    
    // 生成新元素
    this.timer++;
    if (this.timer >= Settings.backgroundElements.spawnInterval && 
        this.elements.length < Settings.backgroundElements.maxElements) {
      this.timer = 0;
      this.generateElements();
    }
    
    // 每300帧输出一次背景元素状态信息（约5秒）
    if (this.game.gameTime % 300 === 0 && this.elements.length > 0) {
      const debugElement = this.elements[0];
      console.log('背景元素状态:', {
        总数量: this.elements.length,
        当前主题: this.currentTheme,
        样本元素: {
          类型: debugElement.type,
          位置: { x: debugElement.x, y: debugElement.y },
          图层: debugElement.layer,
          偏移量: debugElement.swayOffset
        }
      });
    }
  }
  
  render(ctx) {
    // 按图层顺序渲染元素
    ['back', 'mid', 'front'].forEach(layer => {
      const layerElements = this.elements.filter(elem => elem.layer === layer);
      for (const element of layerElements) {
        element.render(ctx);
      }
    });
  }
  
  setTheme(theme) {
    if (typeof theme === 'object') {
      this.currentTheme = this.themeElementsMap[theme.name] || 'forest';
    } else {
      this.currentTheme = theme;
    }
    console.log(`背景元素主题设置为: ${this.currentTheme}`);
  }
  
  generateElements() {
    // 如果没有设置主题，使用默认主题
    const theme = this.currentTheme || 'forest';
    
    // 获取主题配置
    const themeConfig = Settings.backgroundElements.themeElements[theme];
    if (!themeConfig) return;
    
    // 随机选择要生成的元素类型
    const elementConfigs = themeConfig.elements;
    
    // 根据几率决定是否生成元素
    for (const config of elementConfigs) {
      if (Math.random() < config.chance) {
        // 随机选择一个图层
        const layer = config.layers[Math.floor(Math.random() * config.layers.length)];
        
        // 随机选择一个颜色
        const colorOptions = themeConfig.colors[config.type];
        const color = colorOptions[Math.floor(Math.random() * colorOptions.length)];
        
        // 设置动画类型
        const animationType = Settings.backgroundElements.animations[config.type] || 'none';
        
        // 创建元素
        const element = BackgroundElement.createRandomElement(
          this.game,
          config.type,
          layer,
          {
            color,
            animationType
          }
        );
        
        // 添加到元素列表
        this.elements.push(element);
        
        // 每次调用最多生成一个元素
        break;
      }
    }
  }
  
  clear() {
    this.elements = [];
  }
} 